package com.huawei.zyb.taskManager.domain.project.repository;

import com.huawei.zyb.taskManager.domain.project.entity.Project;
import com.huawei.zyb.taskManager.domain.project.valueobject.*;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

/**
 * 项目仓储接口
 * 定义项目聚合的持久化契约
 */
public interface ProjectRepository {
    
    /**
     * 保存项目
     */
    Project save(Project project);
    
    /**
     * 根据ID查找项目
     */
    Optional<Project> findById(ProjectId projectId);
    
    /**
     * 根据项目经理ID查找项目列表
     */
    List<Project> findByManagerId(String managerId);
    
    /**
     * 根据状态查找项目列表
     */
    List<Project> findByStatus(ProjectStatus status);
    
    /**
     * 查找所有项目
     */
    List<Project> findAll();
    
    /**
     * 根据ID删除项目
     */
    void deleteById(ProjectId projectId);
    
    /**
     * 检查项目是否存在
     */
    boolean existsById(ProjectId projectId);
    
    /**
     * 检查项目下是否还有未完成的需求
     */
    boolean hasIncompleteRequirements(ProjectId projectId);
    
    /**
     * 根据项目名称查找项目（模糊匹配）
     */
    List<Project> findByNameContaining(String namePattern);
}